package QuestionDaily;

import java.util.LinkedList;

public class FrontMiddleBackQueue {
    /**
     * 设计一个队列，支持在前，中，后三个位置的 push 和 pop 操作。
     * 完成 FrontMiddleBack 类：
     */
    /**
     * 初始化队列
     */
    public FrontMiddleBackQueue() {
        /**
         * 尝试链表
         * 成功，但是速度太慢
         * 8ms
         * 看了高赞的使用两个栈模拟双端栈的
         */
        list = new LinkedList<>();
    }

    LinkedList<Integer> list;
    /**
     * 将 val 添加到队列的 最前面 。
     * @param val
     */
    public void pushFront(int val) {
        list.addFirst(val);
    }

    /**
     * 将 val 添加到队列的 正中间 。
     *
     * @param val
     */
    public void pushMiddle(int val) {
        list.add(list.size()/2,val);
    }

    /**
     * 将 val 添加到队里的 最后面 。
     * @param val
     */
    public void pushBack(int val) {
        list.add(val);
    }

    /**
     * 将 最前面 的元素从队列中删除并返回值
     * @return 如果删除之前队列为空，那么返回 -1 。
     */
    public int popFront() {
        if(list.size()==0)
            return -1;
        return list.removeFirst();
    }

    /**
     * 将 正中间 的元素从队列中删除并返回值。
     * @return 如果删除之前队列为空，那么返回 -1
     */
    public int popMiddle() {
        if(list.size()==0)
            return -1;
        return list.remove((list.size()-1)/2);
    }

    /**
     * 将 最后面 的元素从队列中删除并返回值
     * @return 如果删除之前队列为空，那么返回 -1 。
     */
    public int popBack() {
        if(list.size()==0)
            return -1;
        return list.removeLast();
    }
}
